package cn.zhf.shop.service;

import cn.zhf.shop.entity.Message;
import cn.zhf.shop.entity.Orders;
import cn.zhf.shop.entity.ShoppingOrder;
import cn.zhf.shop.entity.lesson.Lesson;
import cn.zhf.shop.entity.lesson.LessonOverview;
import cn.zhf.shop.entity.search.OrderSearch;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;

@Service
public interface OrdersService {

    /**
     * 插入订单
     */
    Message<?> insert(Orders o);

    /**
     * 根据订单编号获取订单
     */
    Message<Orders> getByOrderId(String id);

    /**
     * 获取所有订单
     */
    Message<List<Orders>> getAllOrders();

    /**
     * 获取下单人用户编号
     */
    Message<List<Orders>> getByUserId(String userId);

    /**
     * 根据校区名获取订单
     */
    Message<List<Orders>> getByCampusName(String campusName);

    /**
     * 根据订单状态获取订单
     */
    Message<List<Orders>> getByState(Integer state);

    /**
     * 根据订单状态以及用户编号获取订单
     */
    Message<List<Orders>> getByStateAndUserId(String userId, Integer state);

    /**
     * 支付订单（微信小程序统一下单）
     */
    Message<?> payOrder(String orderId) throws Exception;

    /**
     * 校验订单支付结果（向微信支付平台核验订单支付结果）
     */
    Message<?> validOrder(String orderId);

    /**
     * 解析微信中心发来的支付结果
     */
    String resolveWeChatNotify(HttpServletRequest req) throws Exception;

    /**
     * 解析微信中心发来的支付结果H5
     */
    String resolveWeChatNotifyH5(HttpServletRequest req) throws Exception;

    /**
     * 更新订单支付状态
     */
    boolean updatePayInfo(String orderId, int pay);


    Message<List<Orders>> boughtLesson(String userId);

    Message<List<Orders>> getByReference(String reference);

    Message<List<Orders>> getByCam(String hand);

    Message<List<Orders>> getByOrg(String hand);

    Message<?> wxH5pay(String orderId, String userIp) throws Exception;

    Message<?> wxH5payGou(ShoppingOrder shoppingOrder, String userIp) throws Exception;

    int ShoppingOrderinsert(Orders orders);


    /**
     * 银联支付-获取验证码
     */
    Message<?> unionPaySSM(String phoneNo, String txnAmt, String orderId);

    /**
     * 银联支付
     */
    Message<?> unionPay(String txnAmt, String sms, String cardId, String orderId) throws IOException;

    /**
     * 银联分期支付
     */
    Message<?> payByStages(String txnAmt, String sms, String cardId, String number, String orderId);

    /**
     * 银联支付-购物车
     */
    Message<?> unionpayShop(String txnAmt, String sms, String cardId, String orderId) throws IOException;

    /**
     * 银联分期支付
     */
    Message<?> payByStagesShop(String txnAmt, String sms, String cardId, String number, String orderId);

    List<Orders> selectByOrgName(@Param("orgName") String orgName);

    List<Orders> selectByOrgNameAndState(String orgName, Integer state);

    Integer countByOrgName(@Param("orgName") String orgName);

    List<BigDecimal> selectTotalPriceByOrgName(@Param("orgName") String orgName);

    List<BigDecimal> selectTotalPriceByOrgNameAndState(@Param("orgName") String orgName, @Param("state") Integer state);

    List<Orders> getByCampusName2(String campusName);


    /**
     * 订单的精确查询
     */
    Message<List<Orders>> selectBySearch1(Integer lessonId, String orgName, String campusName, String userName, Integer userId);

    /**
     * 订单的模糊查询
     */
    Message<List<Orders>> slectBySearch2(String str, Integer userId);

    Message mohuConditionSearch(OrderSearch c);

    Message updateByPrimaryKeySelective(Orders record);

}



